//植物和僵尸的配置信息
#include "stdafx.h"
#include "game.h"
#include "mainwindow.h"
int GetZwIcon(Plant &zw)
{
    int rtn;
    switch(zw.type)
    {
    case -1:
        return 165;
    case 0:
        return 1;
    case 1:
        return 2;
    case 2:
        if(zw.life>600)
            return 76;
        else if(zw.life>300)
            return 4;
        else if(zw.life>100)
            return 13;
        else
            return 14;
    case 3:
        return 7;
    case 4:
        return 8;
    case 5:
        return 9;
    case 6:
        if(zw.life>1600)
            return 77;
        else if(zw.life>1000)
            return 11;
        else if(zw.life>250)
            return 15;
        else
            return 16;
    case 7:
        return 12;
    case 8:
        if(TM+35>=zw.tag)
            return 43;
        return 100;
    case 9:
        return 48;
    case 10:
        if(TM+35>=zw.tag)
            return 55;
        return 99;
    case 11:
        return 56;
    case 12:
        return zw.fu<10?57:64;
    case 13:
        return 58;
    case 15:
        return 63;
    case 16:
        return zw.fu==0?68:69;
    case 17:
        if(zw.fu>20)
            return 70;
        else if(zw.fu>1)
            return 90;
        else
            return 71;
    case 18:
        return 72;
    case 19:
        if(zw.life<40)
            return 126;
        rtn=82-(zw.life-1)/65+7;
        if(rtn<82)
            rtn=82;
        return rtn;
    case 20:
        return 94;
    case 21:
        return 95;
    case 22:
        return 98;
    case 23:
        return 101;
    case 25:
        if(zw.life>50)
            return 104;
        else
            return 105;
    case 26:
        return 106;
    case 27:
        return 110;
    case 30:
        if(zw.tag<=4)
            return 137;
        else if(zw.tag<=9)
            return 138;
        return 134;
    case 31:
        return 135;
    case 32:
        return 141;
    case 33:
        return 142;
    case 34:
        return 143;
    case 35:
        if(zw.life>300)
            return 144;
        else if(zw.life>100)
            return 145;
        else
            return 146;
    case 36:
        return 149;
    case 37:
        return 151+zw.tag;
    case 39:
        return 159;
    case 40:
        return zw.fu?162:158;
    case 41:
        return 168;
    case 42:
        return 169;
    default:
        return 0;
    }
}
int GetJsIcon(Zombie &js,CGame &ga)
{
    switch(js.type)
    {
    case -2:
        return 28;
    case -1:
        if(js.life>14)
            return 40;
        else if(js.life>6)
            return 41;
        else
            return 42;
    case 0:
        if(js.life>3)
            return 3;
        else if(js.life>1)
            return 17;
        else
            return 18;
    case 1:
        if(js.life>9)
            return 5;
        else if(js.life>6)
            return 19;
        else if(js.life>3)
            return 3;
        else if(js.life>1)
            return 17;
        else
            return 18;
    case 2:
        if(js.life>30)
            return 6;
        else if(js.life>20)
            return 20;
        else if(js.life>10)
            return 21;
        else if(js.life>3)
            return 3;
        else if(js.life>1)
            return 17;
        else
            return 18;
    case 3:
        if(js.life>10)
            return 10;
        else if(js.life>5)
            return 22;
        else
            return 23;
    case 4:
        if(js.life>12)
            return 24;
        else if(js.life>8)
            return 25;
        else
        {
            js.eat=3;
            js.spd=(js.spd<0?-3:3);
            if(js.life>4)
                return 26;
            else
                return 27;
        }
    case 5:
        if(js.life>5)
            return js.jump?29:30;
        else
            return js.jump?35:31;
    case 6:
        if(js.life>12)
            return 32;
        else if(js.life>4)
            return 33;
        else
            return 34;
    case 7:
        if(js.life>55)
            return 36;
        else if(js.life>40)
            return 37;
        else if(js.life>25)
            return 38;
        else if(js.life>10)
            return 39;
        else if(js.life>3)
            return 3;
        else if(js.life>1)
            return 17;
        else
            return 18;
    case 8:
        if(js.life>9)
            return js.jump?44:45;
        else
            return js.jump?46:47;
    case 9:
        if(js.life<=90&&js.spd>0)
        {
            if(!js.fu&&js.y!=-1)
            {
                Zombie j;
                int x=js.x-300;
                if(x<220)
                    x=220;
                j.Create(2,3,1,x,js.y,50,10);
                if(j.x<js.x)ga.NewJs(j);
                if(ga.m_wnd->m_hd||(rand()%2==0&&ga.m_wnd->m_ea==1))
                {
                    j.Create(2,5,2,x+80,js.y,50,10);
                    if(j.x<js.x)ga.NewJs(j);
                }
                if(ga.m_wnd->m_hd)
                {
                    j.Create(2,10,2,x+150,js.y,50,10);
                    if(j.x<js.x)ga.NewJs(j);
                }
                if(ga.m_wnd->m_tui)
                {
                    j.Create(2,20,3,x+200,js.y,50,10);
                    if(j.x<js.x)ga.NewJs(j);
                }
                js.fu=true;
            }
            return js.life<40?52:51;
        }
        else
            return 49;
    case 10:
        if(js.life>3)
            return 50;
        else
            return 53;
    case 11:
        return 54;
    case 12:
        if(js.life>70)
            return 65;
        else if(js.life>50)
            return 66;
        else if(js.life>30)
            return 67;
        else if(js.life>10)
        {
            js.spd=(js.spd<0?-1:1);
            js.eat=2;
            return 166;
        }
        else
        {
            js.spd=(js.spd<0?-1:1);
            js.eat=2;
            return 167;
        }
    case 13:
        if(js.life>8)
            return 73;
        else
            return 74;
    case 14:
        if(js.life>10)
            return 79;
        else
            return 80;
    case 15:
        if(js.life>5)
            return 92;
        else
            return 93;
    case 16:
        if(js.life>12)
            return 96;
        else
            return 97;
    case 17:
        if(js.life>20)
            return 107;
        else if(js.life>5)
            return 108;
        return 109;
    case 18:
        if(js.life>20)
            return 147;
        else
            return 148;
    case 19:
        return 160;
    case 20:
        if(js.life>16)return 163;
        return 164;
    case 100:
        return 75;
    case 101:
        return 81;
    default:
        return 59;
    }
}

int GetJsEat(Plant&zw,Zombie&js,CGame &ga)//僵尸的特殊吃法
{
    int et;
    switch(js.type)
    {
    case 5:
        if(zw.type!=6)//并非高坚果
            js.x-=(js.spd<0?-SI:SI);
        js.spd=(js.spd<0?-1:1);
        js.jump=false;
        return 30;
    case 8:
        if(zw.type!=6)//并非高坚果
        {
            js.x-=js.spd*2;
            return 44;
        }
        js.spd=(js.spd<0?-1:1);
        js.jump=false;
        return 45;
    case 18:
        for(int x=zw.x;x>=0;x-=SI)
        {
            int t=ga.GetZwShu(x,zw.y);
            if(t!=-1)
                ga.plants[t].x-=SI;
            else break;
        }
        for(int i=0;i<ga.plt_cnt;i++)
        {
            if(ga.plants[i].x<0)
            {
                ga.DestroyZw(i);
                break;
            }
        }
        ga.CalZw();
        return js.id;
    case 19:
        js.x-=js.spd;
        return 160;
    case 100://豌豆子弹
        if(zw.type==17||zw.type==32)
        {
            js.x-=js.spd;
            return 75;
        }
        else if(zw.type==25)
        {
            int x=js.x,y=js.y;
            ga.DestroyJs(js.num);
            zw.life-=1;zw.id=GetZwIcon(zw);
            if(zw.life<=0)
            {
                ga.DestroyZw(zw.num);
                return 0;
            }
            Bullet zd;zd.freeze=false;
            zd.color=QColor(0,255,0);
            zd.siz=5;zd.attack=1;zd.spd=4;
            zd.x=x;zd.y=y;
            ga.NewZd(zd);
            return 0;
        }
        if(zw.life<=100&&!ga.m_ng[zw.x/SI][zw.y])
            et=16;
        else
            et=25;
        ga.m_ng[zw.x/SI][zw.y]-=et;et=0;
        if(ga.m_ng[zw.x/SI][zw.y]<0)
        {
            et=-ga.m_ng[zw.x/SI][zw.y];
            ga.m_ng[zw.x/SI][zw.y]=0;
        }
        zw.life-=et;zw.id=GetZwIcon(zw);
        if(zw.life<=0)
            ga.DestroyZw(zw.num);
        ga.DestroyJs(js.num);
        return 0;
    case 101://冰瓜子弹
        if(zw.type==17||zw.type==32)
        {
            js.x-=js.spd;
            return 81;
        }
        else if(zw.type==25)
        {
            int x=js.x-SI/3,y=js.y;
            ga.DestroyJs(js.num);
            zw.life-=4;zw.id=GetZwIcon(zw);
            if(zw.life<=0)
            {
                ga.DestroyZw(zw.num);
                return 0;
            }
            Bullet zd;zd.freeze=true;
            zd.color=QColor(128,128,255);
            zd.siz=11;zd.attack=4;zd.spd=4;
            zd.x=x;zd.y=y;
            ga.NewZd(zd);
            return 0;
        }
        if(zw.life<=100&&!ga.m_ng[zw.x/SI][zw.y])
            et=30;
        else
            et=55;
        ga.m_ng[zw.x/SI][zw.y]-=et;et=0;
        if(ga.m_ng[zw.x/SI][zw.y]<0)
        {
            et=-ga.m_ng[zw.x/SI][zw.y];
            ga.m_ng[zw.x/SI][zw.y]=0;
        }
        zw.life-=et;zw.id=GetZwIcon(zw);
        if(zw.life<=0)
            ga.DestroyZw(zw.num);
        ga.DestroyJs(js.num);
        return 0;
    default:
        return 0;
    }
    //zw.id=GetZwIcon(zw);
}

void Fash(Zombie &js,CGame &ga)
{
    switch(js.type)
    {
    case 13://豌豆僵尸
        Zombie js2;
        js2.Create(8,10000,0,js.x,js.y,75,100,true);
        if(js.spd<0)js2.spd=-10;
        ga.NewJs(js2);
        break;
    case 14://冰瓜僵尸
        Zombie js3;
        js3.Create(8,10000,0,js.x,js.y,81,101,true);
        if(js.spd<0)js3.spd=-10;
        ga.NewJs(js3);
        break;
    case 16://末影人
        js.x=rand()%(MM-1)*SI;
        ga.row_zmb[js.y]-=1;
        do
        {
            js.y=rand()%MN;
        }
        while(ga.iswa[js.y]);
        ga.row_zmb[js.y]+=1;
        break;
    }
}

bool DaZhao(Plant &zw,MainWindow *wnd)
{
    switch(zw.type)
    {
    case 1:
    case 0:
    case 4:
    case 9:
    case 8:
    case 10:
    case 13:
    case 22:
    case 26:
    case 37:
    case 39:
    case 41:
    case 12:
    case 20:
        zw.time=100;
        wnd->KillTimer(zw.num);
        wnd->SetTimer(zw.num,100,NULL);
        break;
    case 2:
    case 6:
    case 19:
        zw.life+=zw.life/2;
        break;
    case 32:
        for(int i=0;i<MN;i++)
        {
            Bullet zd;zd.mh=true;
            zd.color=QColor(240,0,255);
            zd.siz=14;zd.attack=0;zd.spd=4;
            zd.x=zw.x;zd.y=i;
            wnd->m_game.NewZd(zd);
        }
        break;
    default:
        return false;
    }
    zw.id=GetZwIcon(zw);
    wnd->SetTimer(10000+zw.num,zw.dztm,NULL);
    wnd->z_fs+=zw.fei;zw.fei=0;
    wnd->bean_use+=1;
    return true;
}

void QxDaZhao(Plant &zw,MainWindow *wnd)
{
    switch(zw.type)
    {
    case 0:
    case 4:
    case 9:
        zw.time=wnd->plants[1].time;
        break;
    case 8:
        zw.time=wnd->plants[9].time;
        break;
    case 10:
        zw.time=wnd->plants[11].time;
        break;
    case 13:
        zw.time=wnd->plants[1].time;
        break;
    case 1:
        zw.time=wnd->plants[0].time;
        break;
    case 22:
        zw.time=wnd->plants[22].time;
        break;
    case 26:
        zw.time=wnd->plants[26].time;
        break;
    case 37:
        zw.time=wnd->plants[37].time;
        break;
    case 39:
        zw.time=wnd->plants[39].time;
        break;
    case 41:
        zw.time=wnd->plants[41].time;
        break;
    case 12:
        zw.time=wnd->plants[17].time;
        break;
    case 20:
        zw.time=wnd->plants[12].time;
        break;
    }
    wnd->KillTimer(zw.num);
    wnd->SetTimer(zw.num,zw.time,NULL);
}
